﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Windows.Forms;
using UniMana.Win.Training.xucUserControl;
using DevExpress.XtraEditors;
using UniMana.Data;
using UniMana.Utils.Helper;
using UniMana.Utils.Data;

namespace UniMana.Win.Training
{
    public partial class FrmPersonnelRegistSession : DevExpress.XtraEditors.XtraForm
    {
        private DataTable m_tblTable;
        private DBMain m_data = new DBMain();
        private string m_strPersonal;
        DateTime m_dStart;
        DateTime m_dEnd;

        public FrmPersonnelRegistSession()
        {
            InitializeComponent();
        }

        public FrmPersonnelRegistSession(string m_strPersonal, DateTime m_dStart, DateTime m_dEnd)
        {
            m_dStart = new DateTime();
            m_dEnd = new DateTime();
            InitializeComponent();
            this.m_strPersonal = m_strPersonal;
            this.m_dStart = m_dStart;
            this.m_dEnd = m_dEnd;
            gluPersonnel_Personnel.EditValue = Guid.Parse(m_strPersonal);
            dteStart.EditValue = m_dStart;
            dteEnd.EditValue = m_dEnd;
        }

        /// <summary>
        /// Hàm lấy dữ liệu
        /// </summary>

        private void LoadData()
        {
            try
            {
                // Lấy danh sách giảng viên
                m_tblTable = new DataTable();
                m_tblTable = (this.m_data.m_DCReadOnly.Personnel_Personnels.GetListLecturer()).ToDataTable();
                if (m_tblTable.Rows.Count != 0)
                    gluPersonnel_Personnel.GetData(m_tblTable, "Personnel_PersonnelKey", "FullName");
            }
            catch { }
        }

        /// <summary>
        /// Form load
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void FrmPersonnelRegistSession_Load(object sender, EventArgs e)
        {
            try
            {
                LoadData();
                gluPersonnel_Personnel.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor;
                xucUserControlStatic.m_lDatetime = new List<DateTime>();
                SetValueStaticTime();
                Auto.Enabled = true;
                AutoMarkTheRegistrationPoints.Enabled = true;
            }
            catch { }
        }

        /// <summary>
        /// Thiết lập các giá trị thời gian vào các biến toàn cục
        /// </summary>

        private void SetValueStaticTime()
        {
            try
            {
                m_tblTable = new DataTable();
                m_tblTable = (this.m_data.m_DCReadOnly.Training_Sessions.GetDataKeyNameStarFinishTime()).ToDataTable();
                xucUserControlStatic.Ca1Key = int.Parse(m_tblTable.Rows[0]["Training_SessionKey"].ToString());
                xucUserControlStatic.Ca2Key = int.Parse(m_tblTable.Rows[1]["Training_SessionKey"].ToString());
                xucUserControlStatic.Ca3Key = int.Parse(m_tblTable.Rows[2]["Training_SessionKey"].ToString());
                xucUserControlStatic.Ca1Name = m_tblTable.Rows[0]["Name"].ToString() + " :";
                xucUserControlStatic.Ca2Name = m_tblTable.Rows[1]["Name"].ToString() + " :";
                xucUserControlStatic.Ca3Name = m_tblTable.Rows[2]["Name"].ToString() + " :";
                xucUserControlStatic.Ca1Time = m_tblTable.Rows[0]["StartTime"].ToString() + " - " + m_tblTable.Rows[0]["FinishTime"].ToString();
                xucUserControlStatic.Ca2Time = m_tblTable.Rows[1]["StartTime"].ToString() + " - " + m_tblTable.Rows[1]["FinishTime"].ToString();
                xucUserControlStatic.Ca3Time = m_tblTable.Rows[2]["StartTime"].ToString() + " - " + m_tblTable.Rows[2]["FinishTime"].ToString();
            }
            catch { }
        }

        /// <summary>
        /// Hàm kích hoạt hay tắt các điều khiển control khi chọn hoặc chưa chọn giảng viên và kích hoạt hay tắt chức năng chọn giảng viên khi tắt hoặc bật bảng công việc
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void Auto_Tick(object sender, EventArgs e)
        {
            try
            {
                // Điều khiển nút Lưu và chọn Bảng thời gian
                if (gluPersonnel_Personnel.EditValue == null)
                {
                    xucMonthCalendar.Enabled = false;
                    btnSave.Enabled = false;
                    dteStart.Enabled = false;
                    dteEnd.Enabled = false;
                    btnView.Enabled = false;
                }
                else
                {
                    xucMonthCalendar.Enabled = true;
                    btnSave.Enabled = true;
                    dteStart.Enabled = true;
                    dteEnd.Enabled = true;
                    btnView.Enabled = true;
                }

                // Điều khiển control chọn giảng viên
                if (xucUserControlStatic.m_bSelectPersonConTrol)
                {
                    gluPersonnel_Personnel.Enabled = true;
                }
                else
                {
                    gluPersonnel_Personnel.Enabled = false;
                }
            }
            catch { }
        }

        /// <summary>
        /// Hàm tự động tô đậm giá trị ngày có công việc khi biến điều khiển được kích hoạt
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void AutoMarkTheRegistrationPoints_Tick(object sender, EventArgs e)
        {
            try
            {
                if (xucUserControlStatic.m_bAutoMark)
                {
                    AutoMarkTheRegistrationPoints.Enabled = false;
                    MarkTheRegistrationPoints();
                    xucUserControlStatic.m_bAutoMark = false;
                    AutoMarkTheRegistrationPoints.Enabled = true;
                }
            }
            catch { }
        }

        /// <summary>
        /// Lưu thông tin
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                if ((dteStart.EditValue != null) && (dteEnd.EditValue != null))
                {
                    if ((DateTime)dteStart.EditValue >= (DateTime)dteEnd.EditValue)
                    {
                        XtraMessageBox.Show("Ngày bắt đầu phải nhỏ hơn ngày kết thúc");
                    }
                    else
                    {
                        DialogResult result = XtraMessageBox.Show("Bạn có muốn lưu dữ liệu hiện tại cho các ngày hàng tuần trong khoảng thời gian chọn", "Thông báo", MessageBoxButtons.YesNoCancel);
                        if (result == DialogResult.Yes)
                        {
                            xucMonthCalendar.xucDay.m_bSaveGroup = true;
                            xucMonthCalendar.xucDay.m_dDatetimeStart = (DateTime)dteStart.EditValue;
                            xucMonthCalendar.xucDay.m_dDatetimeEnd = (DateTime)dteEnd.EditValue;
                        }
                        if (result == DialogResult.No)
                        {
                            xucMonthCalendar.xucDay.m_bSaveGroup = false;
                        }
                        if (result == DialogResult.Cancel)
                            return;
                        // Kích hoạt biến điều khiển lưu thông tin
                        xucMonthCalendar.xucDay.m_bSaveActive = true;
                    }
                }
                else
                {
                    xucMonthCalendar.xucDay.m_bSaveGroup = false;
                    // Kích hoạt biến điều khiển lưu thông tin
                    xucMonthCalendar.xucDay.m_bSaveActive = true;
                }
            }
            catch { }
        }

        /// <summary>
        /// Hàm tô đậm các giá trị ngày có công việc
        /// </summary>

        private void MarkTheRegistrationPoints()
        {
            try
            {
                xucUserControlStatic.m_lDatetime = new List<DateTime>();
                // Lấy các thời điểm đã đăng ký
                m_tblTable = new DataTable();
                m_tblTable = (this.m_data.m_DCReadOnly.Personnel_Personnel_Sessions.GetDatetimeOfPerson(xucUserControlStatic.m_strPersonKey)).ToDataTable();
                if (m_tblTable.Rows.Count != 0)
                {
                    for (int i = 0; i < m_tblTable.Rows.Count; i++)
                    {
                        xucUserControlStatic.m_lDatetime.Add(Convert.ToDateTime(m_tblTable.Rows[i]["RegistTime"]));
                    }
                }
                xucMonthCalendar.BoldedDates = xucUserControlStatic.m_lDatetime.ToArray();
            }
            catch { }
        }

        /// <summary>
        /// Sự kiện khi chọn giảng viên
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void gluPersonnel_Personnel_EditValueChanged(object sender, EventArgs e)
        {
            try
            {
                // Lấy mã giảng viên
                xucUserControlStatic.m_strPersonKey = gluPersonnel_Personnel.EditValue.ToString();
                // Tô đậm các ngày có công việc
                MarkTheRegistrationPoints();
            }
            catch { }
        }

        private void btnView_Click(object sender, EventArgs e)
        {
            int _flag = 0;
            DateTime m_dStart = new DateTime();
            DateTime m_dEnd = new DateTime();

            if ((dteStart.EditValue == null) && (dteEnd.EditValue == null))
            {
                _flag = 1;
                m_dStart = m_dEnd = SysDateTime.Now.Date;
            }
            else
            {
                if ((dteStart.EditValue != null) && (dteEnd.EditValue != null))
                {
                    if ((DateTime)dteStart.EditValue >= (DateTime)dteEnd.EditValue)
                    {
                        _flag = 0;
                        MessageBox.Show("Ngày bắt đầu phải nhỏ hơn ngày kết thúc");
                    }
                    else
                    {
                        _flag = 1;
                        m_dStart = (DateTime)dteStart.EditValue;
                        m_dEnd = (DateTime)dteEnd.EditValue;
                    }
                }
                else
                {
                    if ((dteStart.EditValue != null) && (dteEnd.EditValue == null))
                    {
                        _flag = 1;
                        m_dStart = (DateTime)dteStart.EditValue;
                        m_dEnd = new DateTime(1, 1, 1, 12, 0, 0);
                    }
                    if ((dteStart.EditValue == null) && (dteEnd.EditValue != null))
                    {
                        _flag = 1;
                        m_dStart = new DateTime(1, 1, 1, 12, 0, 0);
                        m_dEnd = (DateTime)dteEnd.EditValue;
                    }
                }
            }

            if (_flag == 1)
            {
                FrmPersonnelRegistSession_Detail registDetail = new FrmPersonnelRegistSession_Detail(m_dStart, m_dEnd, gluPersonnel_Personnel.EditValue.ToString(), gluPersonnel_Personnel.Text);
                registDetail.ShowDialog();
            }
        }

        private void FrmPersonnelRegistSession_FormClosing(object sender, FormClosingEventArgs e)
        {
            try
            {
                // Kích hoạt biến điều khiển tự động tô màu các ngày có công việc
                xucUserControlStatic.m_bAutoMark = true;
                // Kích hoạt biến điều khiển cho chọn giảng viên
                xucUserControlStatic.m_bSelectPersonConTrol = true;
            }
            catch { }
        }
    }
}
